package educar.materia;

import java.sql.ResultSet;
import java.sql.SQLException;

import java.sql.PreparedStatement;

import educar.login.Session;
import educar.principal.IController;
import educar.principal.IView;
import educar.db.DbConnection;
import educar.db.JPA;
import educar.docente.Docente;
import educar.docente.DocenteNoEncontrado;
import educar.materia.Materia;
import educar.materia.MateriaNoEncontrada;

public class MateriaController{
	private static JPA jpa = new JPA();

	public static boolean existe (String cod) {
		try {
			Materia doc = getMateria(cod);
			return true;
		} catch (MateriaNoEncontrada ex) {
			return false;
		}
	}
	
	/**
	 * Actualiza los datos de un registro en la tabla.
	 * @param column "Nombre de la columna"
	 * @param value "Valor que reemplaza al existente"
	 * @param id "Campo por el cual se identifica"
	 */
	public static void update(String column,String value, String id) {
		jpa.update("materia", column, value,"codigo",id);
	}
	
	public static void delete(String a) {
		jpa.destroy("materia", "codigo", a);
	
	}
	
	/**
	 * Este metodo nos permite agregar una materia en la base de datos, es decir agregar un 
	 * nuevo registro en la tabla materia.
	 * @param materiaa "Objeto de tipo materia"
	 * @return
	 */
	public static boolean save(Materia materiaa) {
		try {
			getMateria(materiaa.getCodigo());
			return false;
		} catch (MateriaNoEncontrada e1) {
			String[] columns = {"codigo","nombre","dni_responsable"};
			PreparedStatement stm = jpa.newRecord(DbConnection.bd+".materia", columns);
			try {
				stm.setString(1, materiaa.getCodigo());
				stm.setString(2, materiaa.getNombre());
				stm.setString(3, materiaa.getDNI());
			} catch (SQLException e) {
				e.printStackTrace();
				return false;
			}
			jpa.create(stm);
			return true;
		}
	}
	
	/**
	 * 
	 * @param id
	 * @return
	 * @throws SQLException
	 */
	public static String[]  showInfo(String id) throws SQLException{
		 String[] dato =new String[3];
		 ResultSet  a=jpa.show("materia", id);
		 while(a.next()){
			 dato[0]=a.getString(1);
			 dato[1]=a.getString(2);
			 dato[2]=a.getString(3);
		 }
		 return dato;
	}
	
	/**
	 * Retorna una instancia de la clase materia obteniada de la base de datos.
	 * @param codigo "Codigo de materia"
	 * @return
	 * @throws MateriaNoEncontrada
	 */
	public static Materia getMateria(String codigo) throws MateriaNoEncontrada{
    	ResultSet rs = null;
		Materia materia = null;
		rs = jpa.getByField("materia", "codigo", codigo);
		try {
			if (rs.next()) {
				materia = new Materia(rs.getString(1), rs.getString(2),rs.getString(3));
			} else {
				throw new MateriaNoEncontrada();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return materia;
    }
}